package aliyun.cx.common.util;

import java.util.HashMap;
import java.util.Map;

/**
 * 统一响应工具类
 * 用于标准化API响应格式，避免重复代码
 */
public class ResponseUtil {
    
    /**
     * 成功响应
     */
    public static Map<String, Object> success() {
        return success(null);
    }
    
    /**
     * 成功响应（带数据）
     */
    public static Map<String, Object> success(Object data) {
        return success("success", data);
    }
    
    /**
     * 成功响应（自定义消息）
     */
    public static Map<String, Object> success(String message) {
        return success(message, null);
    }
    
    /**
     * 成功响应（自定义消息和数据）
     */
    public static Map<String, Object> success(String message, Object data) {
        Map<String, Object> result = new HashMap<>();
        result.put("code", 200);
        result.put("message", message);
        if (data != null) {
            result.put("data", data);
        }
        return result;
    }
    
    /**
     * 失败响应
     */
    public static Map<String, Object> error() {
        return error(500, "操作失败");
    }
    
    /**
     * 失败响应（自定义消息）
     */
    public static Map<String, Object> error(String message) {
        return error(500, message);
    }
    
    /**
     * 失败响应（自定义状态码和消息）
     */
    public static Map<String, Object> error(int code, String message) {
        Map<String, Object> result = new HashMap<>();
        result.put("code", code);
        result.put("message", message);
        return result;
    }
    
    /**
     * 操作结果响应（根据布尔值返回成功或失败）
     */
    public static Map<String, Object> result(boolean success) {
        return result(success, "操作成功", "操作失败");
    }
    
    /**
     * 操作结果响应（自定义成功和失败消息）
     */
    public static Map<String, Object> result(boolean success, String successMessage, String errorMessage) {
        return result(success, successMessage, errorMessage, null);
    }
    
    /**
     * 操作结果响应（带数据）
     */
    public static Map<String, Object> result(boolean success, String successMessage, String errorMessage, Object data) {
        if (success) {
            Map<String, Object> result = new HashMap<>();
            result.put("code", 200);
            result.put("message", successMessage);
            if (data != null) {
                result.put("data", data);
            }
            return result;
        } else {
            Map<String, Object> result = new HashMap<>();
            result.put("code", 500);
            result.put("message", errorMessage);
            return result;
        }
    }
    
    /**
     * 用户创建结果响应
     */
    public static Map<String, Object> userCreateResult(boolean success, Object user) {
        return result(success, "创建成功", "创建失败", user);
    }
    
    /**
     * 用户更新结果响应
     */
    public static Map<String, Object> userUpdateResult(boolean success, Object user) {
        return result(success, "更新成功", "更新失败", user);
    }
    
    /**
     * 用户删除结果响应
     */
    public static Map<String, Object> userDeleteResult(boolean success) {
        return result(success, "删除成功", "删除失败");
    }
    
    /**
     * 通用CRUD操作结果响应
     */
    public static Map<String, Object> crudResult(boolean success, String operation, Object data) {
        String successMessage = operation + "成功";
        String errorMessage = operation + "失败";
        return result(success, successMessage, errorMessage, data);
    }
}
